#include "AnalogSample.h"
#include "log.h"
AnalogSample::AnalogSample(PinName a0,PinName a1,PinName a2,PinName a3):
    _a0(a0),
    _a1(a1),
    _a2(a2),
    _a3(a3)
{
    _sw = 0;
    _need_update = false;
    _enable_a0 = true;
    _enable_a1 = true;
    _enable_a2 = true;
    _enable_a3 = true;
    _last_a0 = 0;
    _last_a1 = 0;
    _last_a2 = 0;
    _last_a3 = 0;
}
AnalogSample::~AnalogSample()
{

}

 void AnalogSample::read()
{
    if(!_need_update){
        return;
    }
    _need_update = false;

    if(_enable_a0){
        _last_a0 = _a0.read_u16();
        _cb_a0.push(_last_a0);
    }
    if(_enable_a1){
        _last_a1 = _a1.read_u16();
        _cb_a1.push(_last_a1);
    }
    if(_enable_a2){
        _last_a2 = _a2.read_u16();
        _cb_a2.push(_last_a2);
    }
    if(_enable_a3){
        _last_a3 = _a3.read_u16();
        _cb_a3.push(_last_a3);
    }
    // log::debug("a0:%d\r\n",_last_a0);
    // log::debug("a1:%d\r\n",_last_a1);
    // log::debug("a2:%d\r\n",_last_a2);
    // log::debug("a3:%d\r\n",_last_a3);

    // _sw++;
    // switch(_sw)
    // {
    //     case 1:_last_a0 = _a0.read_u16();_cb_a0.push(_last_a0);break;
    //     case 2:_last_a1 = _a1.read_u16();_cb_a1.push(_last_a1);break;
    //     case 3:_last_a2 = _a2.read_u16();_cb_a2.push(_last_a2);break;
    //     case 4:_last_a3 = _a3.read_u16();_cb_a3.push(_last_a3);break;
    //     default:_sw = 0;break;
    // }
}
int AnalogSample::a0_buffer()
{
    if(_cb_a0.empty()){
        return _last_a0;
    }else{
        int v=0;
        _cb_a0.pop(v);
        return v;
    }
}
int AnalogSample::a1_buffer()
{
    if(_cb_a1.empty()){
        return _last_a1;
    }else{
        int v=0;
        _cb_a1.pop(v);
        return v;
    }
}
int AnalogSample::a2_buffer()
{
    if(_cb_a2.empty()){
        return _last_a2;
    }else{
        int v=0;
        _cb_a2.pop(v);
        return v;
    }
}
int AnalogSample::a3_buffer()
{
    if(_cb_a3.empty()){
        return _last_a3;
    }else{
        int v=0;
        _cb_a3.pop(v);
        return v;
    }
}


void AnalogSample::schedule()
{
    this->read();
}
void AnalogSample::update()
{
    _need_update = true;
}
void AnalogSample::cleanup()
{

}

void AnalogSample::set_a0_enabled(bool enable)
{
    _enable_a0 = enable;
    if(!enable){
        _last_a0 = 0;
        _cb_a0.reset();
    }
}
void AnalogSample::set_a1_enabled(bool enable)
{
    _enable_a1 = enable;
     if(!enable){
        _last_a1 = 0;
        _cb_a1.reset();
    }
}
void AnalogSample::set_a2_enabled(bool enable)
{
    _enable_a2 = enable;
    if(!enable){
        _last_a2 = 0;
        _cb_a2.reset();
    }
}
void AnalogSample::set_a3_enabled(bool enable)
{
    _enable_a3 = enable; 
    if(!enable){
        _last_a3 = 0;
        _cb_a3.reset();
    }
}